(function($) {
    "use strict";

    var TreeTable = function(tableId, url, columns) {
        this.btInstance = null; // jquery和bootstrapTreeTable绑定的对象
        this.bstableId = tableId;
        this.url = url;
        this.method = "GET";
        this.columns = columns;
        this.data = {}; // ajax的参数
        this.expandColumn = null; // 展开显示的列 
        this.id = 'menuId'; // 选取记录返回的值
        this.code = 'menuId'; // 用于设置父子关系
        this.name = 'name'; // 用于展示显示节点名称
        this.parentCode = 'parentId'; // 用于设置父子关系
        this.expandAll = false; // 是否默认全部展开
        this.lazyload = false; // 是否延迟加载
        this.lazyPageSize = null; // 延迟分页加载
        this.striped = true; // 是否各行渐变色
        this.bordered = true; // 是否显示边框
        this.toolbarId = null;
        this.height = 440;
        this.defaultParentCode = 0;// 设置第一次加载参数，parentCode
    };

    TreeTable.prototype = {
        /**
         * 初始化bootstrap table
         */
        init: function() {
            var tableId = this.bstableId;
            this.btInstance = $('#' + tableId).bootstrapTreeTable({
                id: this.id, // 选取记录返回的值
                code: this.code, // 用于设置父子关系
                name: this.name,
                parentCode: this.parentCode, // 用于设置父子关系
                rootCodeValue: this.rootCodeValue, //设置根节点code值----可指定根节点，默认为null,"",0,"0"
                type: this.method, //请求数据的ajax类型
                url: this.url, //请求数据的ajax的url
                ajaxParams: this.data, //请求数据的ajax的data属性
                expandColumn: this.expandColumn, //在哪一列上面显示展开按钮,从0开始
                striped: this.striped, //是否各行渐变色
                bordered: this.bordered, //是否显示边框
                expandAll: this.expandAll, //是否全部展开
                lazyload: this.lazyload, //是否延迟加载
                lazyPageSize: this.lazyPageSize, //延迟分页加载
                columns: this.columns, //列数组
                toolbar: this.toolbarId ? ('#' + this.toolbarId) : null, //顶部工具条
                height: this.height,
                defaultParentCode: this.defaultParentCode
            });
            return this;
        },
        /**
         * 设置顶部工具条
         */
        setToolbarId: function(toolbarId) {
            this.toolbar = toolbarId;
        },
        /**
         * 设置第一次加载参数，parentCode
         */
        setDefaultParentCode: function(defaultParentCode) {
            this.defaultParentCode = defaultParentCode;
        },
        /**
         * 设置在哪一列上面显示展开按钮,从0开始
         */
        setExpandColumn: function(expandColumn) {
            this.expandColumn = expandColumn;
        },
        /**
         * 设置记录返回的id值
         */
        setIdField: function(id) {
            this.id = id;
        },
        /**
         * 设置记录分级的字段
         */
        setCodeField: function(code) {
            this.code = code;
        },
        /**
         * 用于某种需要展示中文名称的地方预留
         */
        setNameField: function(name) {
            this.name = name;
        },
        /**
         * 设置记录分级的父级字段
         */
        setParentCodeField: function(parentCode) {
            this.parentCode = parentCode;
        },
        /**
         * 设置根节点code值----可指定根节点，默认为null,"",0,"0"
         */
        setRootCodeValue: function(rootCodeValue) {
            this.rootCodeValue = rootCodeValue;
        },
        /**
         * 设置是否默认全部展开
         */
        setExpandAll: function(expandAll) {
            this.expandAll = expandAll;
        },
        /**
         * 设置是否延迟加载
         */
        setLazyload: function(lazyload) {
            this.lazyload = lazyload;
        },
        /**
         * 设置延迟分页加载参数
         */
        setLazyPageSize: function(lazyPageSize) {
            this.lazyPageSize = lazyPageSize;
        },
        /**
         * 设置表格高度
         */
        setHeight: function(height) {
            this.height = height;
        },
        /**
         * 设置ajax post请求时候附带的参数
         */
        set: function(key, value) {
            if (typeof key == "object") {
                for (var i in key) {
                    if (typeof i == "function") {
                        continue;
                    }
                    this.data[i] = key[i];
                }
            } else {
                this.data[key] = (typeof value == "undefined") ? $("#" + key).val() : value;
            }
            return this;
        },
        /**
         * 设置ajax get请求时候附带的参数
         */
        setData: function(data) {
            this.data = data;
            return this;
        },
        /**
         * 清空ajax post请求参数
         */
        clear: function() {
            this.data = {};
            return this;
        },
        /**
         * 刷新表格
         */
        refresh: function(params) {
            if (typeof params != "undefined") {
                this.btInstance.bootstrapTreeTable('refresh', params.query); // 为了兼容bootstrap-table的写法
            } else {
                this.btInstance.bootstrapTreeTable('refresh');
            }
        },
        /**
         * 重置表格视图
         */
        resetView: function(params) {
            if (typeof params != "undefined") {
                this.btInstance.bootstrapTreeTable('resetView', params.height); // 为了兼容bootstrap-table的写法
            }
        }
    };

    window.TreeTable = TreeTable;

})(jQuery);